package com.zjb.demo.system.service;

import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.query.QueryChain;
import com.mybatisflex.solon.service.impl.ServiceImpl;
import com.zjb.demo.system.domain.SysPost;
import com.zjb.demo.system.domain.query.SysPostQuery;
import com.zjb.demo.system.mapper.SysPostMapper;
import org.noear.solon.annotation.Component;

import java.util.List;

import static com.zjb.demo.system.domain.table.SysPostTableDef.SYS_POST;

/**
 * @author 庄佳彬
 * @since 2023/12/30 22:49
 */
@Component
public class SysPostService extends ServiceImpl<SysPostMapper, SysPost> {
    /**
     * 分页查询邮政编码列表
     *
     * @param query 查询条件
     * @return 分页结果
     */
    public Page<SysPost> pageList(SysPostQuery query) {
        var page = new Page<SysPost>(query.getPageNum(), query.getPageSize());
        return queryChain(query)
                .page(page);
    }

    /**
     * 根据给定的查询条件查询并返回SysPost对象的列表。
     *
     * @param query 查询条件对象
     * @return 符合查询条件的SysPost对象列表
     */
    public List<SysPost> list(SysPostQuery query) {
        return queryChain(query).list();
    }

    public QueryChain<SysPost> queryChain(SysPostQuery query) {
        return queryChain()
                .select(SYS_POST.DEFAULT_COLUMNS)
                .from(SYS_POST)
                .where(SYS_POST.POST_CODE.like(query.getPostCode()))
                .and(SYS_POST.STATUS.eq(query.getStatus()))
                .and(SYS_POST.POST_NAME.like(query.getPostName()));

    }

    /**
     * 判断给定的编码是否存在于数据库中的SYS_POST表中。
     * @param postCode 编码
     * @return 如果编码存在于SYS_POST表中，则返回true；否则返回false。
     */
    public boolean existsCode(String postCode) {
        return queryChain()
                .select(SYS_POST.POST_ID)
                .from(SYS_POST)
                .where(SYS_POST.POST_CODE.eq(postCode))
                .exists();
    }

    /**
     * 判断给定的名称是否存在于数据库中的SYS_POST表中。
     * @param postName 名称
     * @return 如果名称存在于SYS_POST表中，则返回true；否则返回false。
     */
    public boolean existsName(String postName) {
        return queryChain()
                .select(SYS_POST.POST_ID)
                .from(SYS_POST)
                .where(SYS_POST.POST_NAME.eq(postName))
                .exists();
    }

}
